Als nächstes wollen wir uns Wildcards anschauen. Wildcards sind dabei Muster mit denen man
Fahrtnamen beschreiben kann. Diese Muster werden expandiert zu tatsächlich vorhandenen
Dateinamen. So kann man zum Beispiel das Muster Stern angeben, was zu einem beliebigen
Teilstring expandiert wird. Gegebenenfalls auch zu einem leeren String. Mit dem Muster
Fragezeichen kann man ein beliebiges Zeichen beschreiben. Das Muster wird also zu einem
beliebigen Zeichen expandiert. Wenn man nun eine Zeichennänge angeben möchte, kann man
dies mit den eckigen Klammern machen. Mit eckige Klammer auf a-d werden die Zeichen
a-d beschrieben. Möchte man, dass ein Zeichen aus einer bestimmten Menge nicht vorkommt,
kann man dies machen, indem man noch ein Ausrufezeichen davor schreibt. Nun kann man eine Dateipfad
angeben und zwischendrin die Muster verwenden. Der Dateipfad mit den Mustern wird anschließend
zu allem expandiert, was auf die Muster zutrifft. Eine Ausnahme davon sind Dateien, deren Name
mit einem Punkt beginnt. Diese können nur durch ein Muster getroffen werden, das explizit
mit einem Punkt beginnt. Weitere Details zu den Mustern findet ihr auf der Manpage zu
den Globs, und zwar in der Sektion 7. Wenn ihr nun diese Muster verwenden wollt, dann
könnt ihr dies ganz einfach in Befehlen machen, die ihr auf der Shell tippt. Die Shell wird
diese Muster automatisch expandieren und die Muster durch die jeweiligen Verzeichnisse
bzw. Dateien ersetzen, auf die das Muster zutrifft. Wenn ihr jedoch z.B. ein Stern als
Argument an ein Programm übergeben wollt, dann müsst ihr dies in dem Aufruf in Anführungsstriche
setzen. Dies gilt für alle Muster, von denen ihr nicht wollt, dass diese expandiert werden,
sondern dass diese in ihrer Form bleiben. Um das Ganze ein bisschen zu verdeutlichen,
haben wir hier nun eine Tabelle mit verschiedenen Mustern und möglicher Dateinamen. Nun wollen
wir prüfen, welches der Muster jeweils auf welchen Dateinamen zutrifft. Das erste Muster
ist Test-Sternchen. Das bedeutet, das Muster trifft auf alle Dateien zu, die mit Test beginnen
und anschließend etwas Beliebiges oder Nichts folgt. Dieses Muster trifft hier auf die Dateien
Test.C und Test.2.C zu. Als nächstes haben wir das Muster Sternchen, Test, Sternchen.
Hier kann das Stern wieder zu Beliebigen expandieren. Also trifft dieses Muster auf alle Dateinamen
zu, die irgendwo den String Test enthalten. Auch wieder auf Test.C und Test.2.C, die mit
Test beginnen, da der Stern ebenfalls zu einem leeren String expandiert werden kann. Zusätzlich
ist auch die Datei attest.doc von dem Muster mit abgedeckt. Die Ausnahme bildet an der
Stelle jedoch die Datei.test.c, da der Stern nicht automatisch auf führende Punkte expandiert
wird. Das nächste Muster lautet Test?.Stern. Das Fragezeichen wird zu einem einzelnen Zeichen
expandiert. Dies darf aber nicht leer sein. Dementsprechend trifft dieses Muster nur auf
den Namen Test.2.C zu. Da hier das Fragezeichen zu der 2 expandiert wird, der Punkt weiterhin
übernommen wird und der Stern zu dem C expandiert. Das Muster T und in eckigen Klammern 1 und
X gefolgt von einem Punkt und Stern trifft nur noch auf die Datei T1.h zu und auf die
Datei Tx.map. Wenn wir nun das Muster umändern und in den eckigen Klammern schreiben Ausrufezeichen
1,2, dann fordern wir, dass explizit keine 1 und keine 2 nach dem T an zweiter Stelle
folgen sollen. Dementsprechend trifft das Muster nur noch auf die Datei Tx.map zu. Und
schließlich ein Muster mit vorangesetzten Punkt. Dies trifft nun auf die Datei.test.c
zu. Nun stellt sich die Frage, wie können wir diese Muster in unseren eigenen Programmen
mit verwenden? Tatsächlich gibt es dafür schon eine Bibliotheksfunktion, die wir einsetzen
können, nämlich FnMatch. Die Funktion FnMatch prüft, ob ein String, der hier als zweites
Argument übergeben wird, auf ein Muster zutrifft, das das erste Argument darstellt. Außerdem
können als drittes Argument noch Flex angegeben werden, die untereinander bitweise verodert
werden. Die Flex beinhalten z.B. FnM pathname, mit dem spezifiziert werden kann, ob ein
Strichstrich in einem String von einem Muster getroffen wird, also ob ein Stern oder ein
Fragezeichen zu einem Strichstrich expandieren darf, oder eben das Flag FnM period, mit dem
angegeben werden kann, ob ein Führung nach Punkt in einem String von einem Muster getroffen
werden kann, oder eben noch weitere Flex, die in der Man-Page beschrieben sind.
Zugänglich über
Offener Zugang
Dauer
00:05:05 Min
Aufnahmedatum
2020-07-21
Hochgeladen am
2020-07-21 18:36:22
Sprache
de-DE